package cn.lycode.generator.domian.vo;


import cn.lycode.generator.domian.entity.GeneratorTable;
import cn.lycode.generator.domian.entity.GeneratorTableColumn;
import lombok.Data;
import org.springframework.beans.BeanUtils;

import java.util.ArrayList;
import java.util.List;

/**
 * GeneratorDetailVO
 * 代码生成配置详情
 */

@Data
public class GeneratorDetailVO {

    private BaseInfo baseInfo; //基本信息
    private GeneratorInfo generatorInfo; //生成信息
    private List<Column> columns; //column字段信息


    public void setTableInfo(GeneratorTable generatorTable) {
        BaseInfo baseInfo = new BaseInfo();
        baseInfo.setTableId(generatorTable.getTableId());
        baseInfo.setTableName(generatorTable.getTableName());
        baseInfo.setTableComment(generatorTable.getTableComment());
        baseInfo.setClassName(generatorTable.getClassName());
        baseInfo.setCamelClassName(generatorTable.getCamelClassName());
        baseInfo.setFunctionAuthor(generatorTable.getFunctionAuthor());
        baseInfo.setRemark(generatorTable.getRemark());
        this.baseInfo = baseInfo;

        GeneratorInfo generatorInfo = new GeneratorInfo();
        generatorInfo.setTplCategory(generatorTable.getTplCategory());
        generatorInfo.setPackageName(generatorTable.getPackageName());
        generatorInfo.setModuleName(generatorTable.getModuleName());
        generatorInfo.setBusinessName(generatorTable.getBusinessName());
        generatorInfo.setFunctionName(generatorTable.getFunctionName());
        generatorInfo.setOptions(generatorTable.getOptions());
        generatorInfo.setType(generatorTable.getType());
        generatorInfo.setParentMenuId(generatorTable.getParentMenuId());
        generatorInfo.setPathApi(generatorTable.getPathApi());
        generatorInfo.setPathWeb(generatorTable.getPathWeb());
        generatorInfo.setMenuInitType(generatorTable.getMenuInitType());
        generatorInfo.setBtnPermissionType(generatorTable.getBtnPermissionType());
        generatorInfo.setHasSwagger(generatorTable.getHasSwagger());
        generatorInfo.setHasImport(generatorTable.getHasImport());
        generatorInfo.setHasExport(generatorTable.getHasExport());
        generatorInfo.setGenerateType(generatorTable.getGenerateType());
        generatorInfo.setIsAutofill(generatorTable.getIsAutofill());
        this.generatorInfo = generatorInfo;
    }

    public void setColumns(List<GeneratorTableColumn> generatorTableColumns) {
        List<Column> columnList = new ArrayList<>();
        for (GeneratorTableColumn tableColumn : generatorTableColumns) {
            Column column = new Column();
            BeanUtils.copyProperties(tableColumn, column);
            columnList.add(column);
        }
        this.columns = columnList;
    }


    @Data
    public static class BaseInfo {
        private Long tableId;
        private String tableName; //表名称
        private String tableComment; //表描述
        private String ClassName; //实体类名称
        private String camelClassName; //camel实体类名称
        private String functionAuthor; //作者
        private String remark; //备注
    }

    @Data
    public static class GeneratorInfo {

        private String tplCategory; //模板
        private String packageName; //包路径
        private String moduleName; //模块名
        private String businessName; //业务名
        private String functionName; //功能名 (作为菜单标题、)
        private String options; //其他参数。如上级菜单
        private String type; //代码生成方式
        private Long parentMenuId; //上级菜单id
        private String pathApi; //api生成路径
        private String pathWeb; //web生成路径
        private String menuInitType; //是否自动创建菜单路由（1 是）
        private String btnPermissionType;  //是否自动创建按钮权限 (1 是)
        private String hasSwagger; //是否支持Swagger
        private String hasImport; //是否支持导入(1 是)
        private String hasExport; //是否支持导出(1 是)
        private String generateType; //生成类型
        private String isAutofill; //是否自动填充(1 是)
    }

    @Data
    public static class Column {
        private Integer columnId; //column_id
        private Integer tableId; //table_id
        private String columnName; //列名称
        private String columnComment; //列描述
        private String columnType; //列类型
        //JAVA类型 （String、Integer、Long、Double、BigDecimal、Date、LocalDateTime、LocalDate、LocalTime）
        private String javaType;
        private String tsType; //ts类型
        //搜索类型(input、input-number、select、select-v2、tree-select、cascader、date-picker、time-picker、time-select、switch、slider)
        private String searchType;
        private String javaTypePackage; //JAVA类型 （引包
        private String specialPackages; //JAVA特殊包类型 （引包）
        private String javaField; //JAVA字段名
        private String upCamelField; //get开头的驼峰字段名
        private String isPk; //是否主键（1是）
        private String isIncrement; //是否自增（1是）
        private String isRequired; //是否必填（1是）
        private String isInsert; //是否为插入字段（1是）
        private String isEdit; //是否编辑字段（1是）
        private String isList; //是否列表字段（1是）
        private String isQuery; //是否查询字段（1是）
        //是否自动填充(1 是)，通用属性的自动填充，需代码配合（create_id、create_time、update_id、update_time）
        private String isAutofill;
        private String isUniqueValid; //是否进行唯一校验(1 是)，字段唯一性校验
        //查询方式（等于EQ、不等于NEQ、大于GT、小于LT、范围BETWEEN、大于等于GTE、小于等于LTE）
        private String queryType;
        //显示类型（input、textarea、select、radio、checkbox、datetime、date、time、imageUpload、fileUpload、editor）
        private String htmlType;
        private String dictType; //字典类型
        private String options; //其他设置
        private String isLogicDel;//是否逻辑删除(1 是)
        //自动填充类型(FieldFill.INSERT/FieldFill.UPDATE/FieldFill.INSERT_UPDATE)
        private String autofillType;
        private String isImport; //是否导入字段(1 是)
        private String isExport; //是否导出字段(1 是)
    }


}
